/**
 * 存储键常量配置
 * 统一管理所有localStorage和sessionStorage的键名
 */

/**
 * 存储键前缀
 * 用于区分不同应用的存储数据，避免键名冲突
 */
export const STORAGE_PREFIX = 'core'

/**
 * Redux Persist 存储键
 * 注意：redux-persist 会自动添加 'persist:' 前缀
 * 最终存储键格式：persist:core-root, persist:core-menu
 */
export const PERSIST_KEYS = {
  /** 根状态持久化键 */
  ROOT: `${STORAGE_PREFIX}-root`,
  /** 菜单状态持久化键 */
  MENU: `${STORAGE_PREFIX}-menu`,
} as const

/**
 * 直接 localStorage 存储键
 */
export const STORAGE_KEYS = {
  /** 主题设置存储键 */
  THEME_SETTINGS: `${STORAGE_PREFIX}-themeSettings`,
  /** 用户偏好设置存储键 */
  USER_PREFERENCES: `${STORAGE_PREFIX}-userPreferences`,
  /** 临时数据存储键 */
  TEMP_DATA: `${STORAGE_PREFIX}-tempData`,
} as const

/**
 * 获取带前缀的存储键
 * @param key 键名
 * @returns 带前缀的完整键名
 */
export const getStorageKey = (key: string): string => {
  return `${STORAGE_PREFIX}-${key}`
}

/**
 * 清除所有应用相关的存储数据
 * 用于用户登出或重置应用状态
 */
export const clearAllAppStorage = (): void => {
  const keys = Object.keys(localStorage)
  keys.forEach(key => {
    if (key.startsWith(STORAGE_PREFIX)) {
      localStorage.removeItem(key)
    }
  })
}

/**
 * 获取所有应用相关的存储键
 * @returns 包含应用前缀的所有存储键数组
 */
export const getAppStorageKeys = (): string[] => {
  const keys = Object.keys(localStorage)
  return keys.filter(key => key.startsWith(STORAGE_PREFIX))
}
